#include <iostream>
#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
  const std::string myenv="HELLO=AAAAAAAAAAAAAAAAAAAA";

extern char **environ;//坏境变量导出来
int main()
{
    putenv((char*)myenv.c_str());//新增坏境变量，谁调putenv坏境变量就导给谁

    pid_t id = fork();//多进程替换
    if(id == 0)
    {
        char *const argv[] = {//使用execv先创建好指针数组
            (char*)"other",
            nullptr
        };

        //(void)argv;
        char *const env[] = {
            (char*)"HELLO=bite",
            (char*)"HELLO1=bite1",
            (char*)"HELLO2=bite2",
            (char*)"HELLO3=bite3"
        };

        execvpe("./other", argv, environ);//e指的是坏境变量；p是Path； 使用全新的坏境变量（自己定义，自己传递）；将新增的坏境变量导给子进程即myenv="HELLO=AAAAAAAAAAAAAAAAAAAA";


        //execvp(argv[0], argv);//不用带可执行程序文件名/usr/bin/ls
        //execlp("ls", "ls", "--color", "-aln", nullptr);//你想与运行谁，不需要路径;ls和ls不重复；第一个l是想执行谁；p就是Path


        //execv("/usr/bin/ls", argv);//参数以指针数组的形式创建好；
        // child
        //execl("/bin/ls", "ls", "-l", "--color", "-a", nullptr);
        //execl("./other", "other", nullptr);//运行myexec.c也会打印坏境变量；other中打印的就是坏境变量
        //execl("/usr/bin/python", "python", "test.py", nullptr);
        //execl("/usr/bin/bash", "bash", "test.sh", nullptr);
        exit(1);
    }
    // father/usr/bin/top"/usr/bin/top"/usr/bin/top/usr/bin/top
    pid_t rid = waitpid(id, nullptr, 0);
    if(rid > 0)
    {
        printf("等待子进程成功!\n");
    }    
 
 

////execl("./other", "other", nullptr);//进程替换不会创建新进程

 // execl("/usr/bin/top", "top", nullptr);//进程程序替换，top直接换掉/usr/bin/top命令，哪个进程调我，自己的数据就会被传过来的参数覆盖掉；命令行怎么写参数就怎么传，例如ls -l -a;参数直接传ls -l -a;
  return 0;
}
